package com.huohuo.concurrent.lock;


import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * 使用lock，避免在高并发环境下产生相同的订单号。
 *
 */
public class OrderNumberGeneratorLock {

    public static int count = 0;

    public static Lock lock = new ReentrantLock();

    /**
     * 方法1：方法上使用synchronized来修饰，使其变成同步方法。避免出现相同的订单号。
     * 生成订单号方法
     * @return
     */
    public  String generatorNumber(){
        try {
            lock.lock();
            SimpleDateFormat sf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );
            return sf.format( new Date())+"-"+ ++count; //先加1再返回值
        }finally {
            lock.unlock();//放在finally中保证锁最后肯定释放掉
        }
    }








}
